package com.flying.io;

import org.testng.annotations.Test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @ClassName TestFileInputStream
 * @Author flying
 * @Date 2025/2/6 13:51
 * @Description 文件字节输入流
 */
public class TestFileInputStream {

    /**
     * FileInputStream: 通过字节的方式读取文件，适合读取所有类型的文件（图像、视频、文本文件等）。
     */
    @Test
    void test1() {
        // try...with...resource  ，自动关闭流资源
        //读取文件
        try (FileInputStream fis = new FileInputStream("a.txt")) {

            StringBuilder sb = new StringBuilder();
            byte[] buffer = new byte[1024];   // 字节缓冲区
            int temp = 0;
            while ((temp = fis.read(buffer)) != -1) {
                String s = new String(buffer, 0, temp);
                System.out.println(s);
            }


        } catch (IOException e) {
            e.printStackTrace();
        }


    }


    @Test
    public void test2() {
        //使用try-with-resource方式关闭资源。
        //在try中打开资源，不需要在代码中添加finally块关闭资源。
        try (FileInputStream fis = new FileInputStream("a.txt");) {
            StringBuilder sb = new StringBuilder();
            int temp = 0;
            while ((temp = fis.read()) != -1) {
                sb.append((char) temp);

            }
            System.out.println(sb);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    // 文件输出字节流: FileOutputStream 通过字节的方式写数据到文件中，适合所有类型的文件（图像、视频、文本文件等
    @Test
    public void test3() {

        // 输出的内容
        String s = "你好世界";
        // try...with...resource结构定义流资源
        // new FileOutputStream(文件路径,boolean)  : 真: 在源文件中追加内容;false|缺省: 覆盖源文件
        try (FileOutputStream fos = new FileOutputStream("a.txt",true)) {
        // 字节输出流,只能输出字节,需要将字符串转换为字节数组
            fos.write(s.getBytes());

            //  将数据从内存中写入到磁盘中
            fos.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}
